package edu.uaskl.jqf.model.gates.util;

import edu.uaskl.jqf.model.gates.ControlledNot;
import edu.uaskl.jqf.model.gates.ControlledU;
import edu.uaskl.jqf.model.gates.Hadamard;
import edu.uaskl.jqf.model.gates.Identity;
import edu.uaskl.jqf.model.gates.InverseQuantumFourierTransformation;
import edu.uaskl.jqf.model.gates.Not;
import edu.uaskl.jqf.model.gates.QuantumFourierTransformation;
import edu.uaskl.jqf.model.gates.Swap;
import edu.uaskl.jqf.model.gates.interfaces.Gate;
import edu.uaskl.jqf.model.matrix.MatrixComplex;

public class Gates {
    public static final Gate CNOT = new ControlledNot();
    public static final Gate HADAMARD = new Hadamard();
    public static final Gate IDENTITY = new Identity();
    public static final Gate NOT = new Not();
    public static final Gate QFT = new QuantumFourierTransformation();
    public static final Gate IQFT = new InverseQuantumFourierTransformation();
    public static final Gate SWAP = new Swap();

    public static final Gate cU(final MatrixComplex matrix) {
        return new ControlledU(matrix);
    }
}
